function [Grid,TrMat]=MarkovChain_IndependentMixture(varargin)
%% Preliminaries
    Num_Cell=   nargin;
%     if Num_Cell<2
%         error('Less than 1 cell!');
%     end
%% Mix the Markov Chain Recursively
    Grid    =   varargin{1}{1};
    TrMat   =   varargin{1}{2};
    if Num_Cell>=2
        for ii=2:Num_Cell
            [Grid,TrMat] ...
                    =   IndependentMarkovChainMixture_2({Grid,TrMat},varargin{ii});
        end
    end

end

%% Sub-Function to Mix Two Independent Markov Chain
% Note: MC=cell{Grid,TrMat}
function [Grid,TrMat]=IndependentMarkovChainMixture_2(MC_1,MC_2)
    Grid_1  =   MC_1{1};
    TrMat_1 =   MC_1{2};
    Grid_2  =   MC_2{1};
    TrMat_2 =   MC_2{2};
    
    Num_1   =   size(Grid_1,1);
    Num_2   =   size(Grid_2,1);

    IdGrid  =   gridmake((1:1:Num_1)',(1:1:Num_2)');
    Grid    =   gridmake(Grid_1,Grid_2);

    TempExtendTrMat_1 ...
            =   TrMat_1(:,IdGrid(:,1));
    TempExtendTrMat_2 ...
            =   TrMat_2(:,IdGrid(:,2));
    ExtendTrMat_1 ...
            =   TempExtendTrMat_1(IdGrid(:,1),:);
    ExtendTrMat_2 ...
            =   TempExtendTrMat_2(IdGrid(:,2),:);
    TrMat   =   ExtendTrMat_1.*ExtendTrMat_2;
end